Clean up use of wait_event_interruptible().
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 2 Mar 2006 17:57:03 +0000 (18:57 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Thu, 2 Mar 2006 17:57:03 +0000 (18:57 +0100)
Signed-off-by: Keir Fraser <keir@xensource.com>
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_comms.c
linux-2.6-xen-sparse/drivers/xen/xenbus/xenbus_xs.c

index 59817f076b070acd147bcaab32fb991e2c1c4c9b..0c7c32693c3d650980fb8b4c34521b0d1ace98aa 100644 (file)
@@ -89,14 +89,18 @@ int xb_write(const void *data, unsigned len)
 {
        struct xenstore_domain_interface *intf = xenstore_domain_interface();
        XENSTORE_RING_IDX cons, prod;
+       int rc;
 
        while (len != 0) {
                void *dst;
                unsigned int avail;
 
-               wait_event_interruptible(xb_waitq,
-                                        (intf->req_prod - intf->req_cons) !=
-                                        XENSTORE_RING_SIZE);
+               rc = wait_event_interruptible(
+                       xb_waitq,
+                       (intf->req_prod - intf->req_cons) !=
+                       XENSTORE_RING_SIZE);
+               if (rc < 0)
+                       return rc;
 
                /* Read indexes, then verify. */
                cons = intf->req_cons;
@@ -130,13 +134,17 @@ int xb_read(void *data, unsigned len)
 {
        struct xenstore_domain_interface *intf = xenstore_domain_interface();
        XENSTORE_RING_IDX cons, prod;
+       int rc;
 
        while (len != 0) {
                unsigned int avail;
                const char *src;
 
-               wait_event_interruptible(xb_waitq,
-                                        intf->rsp_cons != intf->rsp_prod);
+               rc = wait_event_interruptible(
+                       xb_waitq,
+                       intf->rsp_cons != intf->rsp_prod);
+               if (rc < 0)
+                       return rc;
 
                /* Read indexes, then verify. */
                cons = intf->rsp_cons;
index 1bc9177ec59a95954f6a7220e44a93a2004ab920..8ee2fbb99c8dfb5643f29d1782c0be878572583b 100644 (file)
@@ -123,8 +123,9 @@ static void *read_reply(enum xsd_sockmsg_type *type, unsigned int *len)
 
        while (list_empty(&xs_state.reply_list)) {
                spin_unlock(&xs_state.reply_lock);
-               wait_event_interruptible(xs_state.reply_waitq,
-                                        !list_empty(&xs_state.reply_list));
+               /* XXX FIXME: Avoid synchronous wait for response here. */
+               wait_event(xs_state.reply_waitq,
+                          !list_empty(&xs_state.reply_list));
                spin_lock(&xs_state.reply_lock);
        }
 
@@ -685,6 +686,9 @@ static int xenwatch_thread(void *unused)
                wait_event_interruptible(watch_events_waitq,
                                         !list_empty(&watch_events));
 
+               if (kthread_should_stop())
+                       break;
+
                down(&xenwatch_mutex);
 
                spin_lock(&watch_events_lock);
@@ -705,6 +709,8 @@ static int xenwatch_thread(void *unused)
 
                up(&xenwatch_mutex);
        }
+
+       return 0;
 }
 
 static int process_msg(void)
@@ -778,7 +784,11 @@ static int xenbus_thread(void *unused)
                if (err)
                        printk(KERN_WARNING "XENBUS error %d while reading "
                               "message\n", err);
+               if (kthread_should_stop())
+                       break;
        }
+
+       return 0;
 }
 
 int xs_init(void)